<?xml version="1.0"?>
<component name="org.nuxeo.ecm.platform.search.default.pageproviders.override">

  <require>org.nuxeo.ecm.platform.search.default.pageproviders</require>

  <extension point="providers" target="org.nuxeo.ecm.platform.query.api.PageProviderService">

    <coreQueryPageProvider name="default_search">
      <trackUsage>true</trackUsage>
      <whereClause docType="DefaultSearch">
        <fixedPart>
          ecm:primaryType NOT IN ('Domain', 'SectionRoot', 'TemplateRoot', 'WorkspaceRoot', 'Favorites')
          AND ecm:mixinType != 'HiddenInNavigation'
          AND NOT (ecm:mixinType = 'Collection' AND ecm:name = 'Locally Edited')
          AND ecm:isVersion = 0
          AND ecm:isTrashed = 0
          AND ecm:parentId IS NOT NULL
          AND SORTED_COLUMN IS NOT NULL
        </fixedPart>
        <predicate operator="FULLTEXT" parameter="ecm:fulltext">
          <field name="ecm_fulltext" schema="default_search"/>
        </predicate>
        <predicate operator="IN" parameter="dc:creator">
          <field name="dc_creator" schema="default_search"/>
        </predicate>
        <predicate operator="BETWEEN" parameter="dc:created">
          <field name="dc_created_min" schema="default_search"/>
          <field name="dc_created_max" schema="default_search"/>
        </predicate>
        <predicate operator="BETWEEN" parameter="dc:modified">
          <field name="dc_modified_min" schema="default_search"/>
          <field name="dc_modified_max" schema="default_search"/>
        </predicate>
        <predicate operator="IN" parameter="dc:nature">
          <field name="dc_nature" schema="default_search"/>
        </predicate>
        <predicate operator="STARTSWITH" parameter="dc:subjects">
          <field name="dc_subjects" schema="default_search"/>
        </predicate>
        <predicate operator="STARTSWITH" parameter="dc:coverage">
          <field name="dc_coverage" schema="default_search"/>
        </predicate>
        <predicate operator="STARTSWITH" parameter="ecm:path">
          <field name="ecm_path" schema="default_search"/>
        </predicate>
        <predicate operator="IN" parameter="ecm:tag">
          <field name="ecm_tags" schema="default_search"/>
        </predicate>
        <predicate operator="IN" parameter="collectionMember:collectionIds">
          <field name="ecm_collections" schema="default_search"/>
        </predicate>
      </whereClause>
      <aggregates>
        <aggregate id="dc_nature_agg" parameter="dc:nature" type="terms">
          <field name="dc_nature_agg" schema="default_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="dc_subjects_agg" parameter="dc:subjects" type="terms">
          <field name="dc_subjects_agg" schema="default_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="dc_coverage_agg" parameter="dc:coverage" type="terms">
          <field name="dc_coverage_agg" schema="default_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="dc_creator_agg" parameter="dc:creator" type="terms">
          <field name="dc_creator_agg" schema="default_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="common_size_agg" parameter="file:content.length" type="range">
          <field name="common_size_agg" schema="default_search"/>
          <ranges>
            <range key="tiny" to="102400"/>
            <range from="102401" key="small" to="1048576"/>
            <range from="1048577" key="medium" to="10485760"/>
            <range from="10485761" key="big" to="104857600"/>
            <range from="104857601" key="huge"/>
          </ranges>
        </aggregate>
        <aggregate id="dc_modified_agg" parameter="dc:modified" type="date_range">
          <field name="dc_modified_agg" schema="default_search"/>
          <properties>
            <property name="format">"dd-MM-yyyy"</property>
          </properties>
          <dateRanges>
            <dateRange fromDate="now-24H" key="last24h" toDate="now"/>
            <dateRange fromDate="now-7d" key="lastWeek" toDate="now-24H"/>
            <dateRange fromDate="now-1M" key="lastMonth" toDate="now-7d"/>
            <dateRange fromDate="now-1y" key="lastYear" toDate="now-1M"/>
            <dateRange key="priorToLastYear" toDate="now-1y"/>
          </dateRanges>
        </aggregate>
      </aggregates>
      <quickFilters>
        <quickFilter name="noFolder">
          <clause>ecm:mixinType != 'Folderish'</clause>
        </quickFilter>
        <quickFilter name="mostRecent">
          <sort ascending="false" column="dc:modified"/>
        </quickFilter>
        <quickFilter name="onlyValidated">
          <clause>ecm:currentLifeCycleState = 'approved'</clause>
          <sort ascending="false" column="dc:modified"/>
        </quickFilter>
      </quickFilters>
      <pageSize>20</pageSize>
    </coreQueryPageProvider>

    <coreQueryPageProvider name="default_trash_search">
      <trackUsage>true</trackUsage>
      <whereClause docType="DefaultSearch">
        <fixedPart>
          ecm:primaryType NOT IN ('Domain', 'SectionRoot', 'TemplateRoot', 'WorkspaceRoot', 'Favorites')
          AND ecm:mixinType != 'HiddenInNavigation'
          AND NOT (ecm:mixinType = 'Collection' AND ecm:name = 'Locally Edited')
          AND ecm:isCheckedInVersion = 0
          AND ecm:isTrashed = 1
          AND ecm:parentId IS NOT NULL
          AND SORTED_COLUMN IS NOT NULL
        </fixedPart>
        <predicate operator="FULLTEXT" parameter="ecm:fulltext">
          <field name="ecm_fulltext" schema="default_search"/>
        </predicate>
        <predicate operator="STARTSWITH" parameter="ecm:path">
          <field name="ecm_path" schema="default_search"/>
        </predicate>
      </whereClause>
      <aggregates>
        <aggregate id="dc_creator_agg" parameter="dc:creator" type="terms">
          <field name="dc_creator_agg" schema="default_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="common_size_agg" parameter="file:content.length" type="range">
          <field name="common_size_agg" schema="default_search"/>
          <ranges>
            <range key="tiny" to="102400"/>
            <range from="102401" key="small" to="1048576"/>
            <range from="1048577" key="medium" to="10485760"/>
            <range from="10485761" key="big" to="104857600"/>
            <range from="104857601" key="huge"/>
          </ranges>
        </aggregate>
      </aggregates>
      <pageSize>20</pageSize>
    </coreQueryPageProvider>

    <coreQueryPageProvider name="simple_search">
      <trackUsage>true</trackUsage>
      <whereClause docType="DefaultSearch">
        <fixedPart>
          ecm:mixinType != 'HiddenInNavigation' AND
          ecm:isVersion = 0
          AND ecm:isTrashed = 0
          AND ecm:parentId IS NOT NULL
          AND SORTED_COLUMN IS NOT NULL
        </fixedPart>
        <predicate operator="FULLTEXT" parameter="ecm:fulltext">
          <field name="ecm_fulltext" schema="default_search"/>
        </predicate>
      </whereClause>
      <!-- sort column="dc:title" ascending="true" / sort by fulltext relevance -->
      <pageSize>20</pageSize>
    </coreQueryPageProvider>

    <coreQueryPageProvider name="nxql_search">
      <trackUsage>true</trackUsage>
      <searchDocumentType>DefaultSearch</searchDocumentType>
      <pattern escapeParameters="false" quoteParameters="false">?</pattern>
      <!-- sort column="dc:title" ascending="true" / sort by fulltext relevance -->
      <pageSize>20</pageSize>
    </coreQueryPageProvider>

    <coreQueryPageProvider class="org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider" name="expired_search">
      <trackUsage>true</trackUsage>
      <property name="maxResults">DEFAULT_NAVIGATION_RESULTS</property>
      <whereClause docType="ExpiredSearch">
        <fixedPart>
          ecm:isVersion = 0 AND
          ecm:mixinType !=
          'HiddenInNavigation' AND ecm:isTrashed = 0
        </fixedPart>
        <predicate operator="FULLTEXT" parameter="dc:title">
          <field name="title" schema="expired_search"/>
        </predicate>
        <predicate operator="&lt;" parameter="dc:expired">
          <field name="expired_max" schema="expired_search"/>
        </predicate>
        <predicate operator=">" parameter="dc:expired">
          <field name="expired_min" schema="expired_search"/>
        </predicate>
      </whereClause>
      <aggregates>
        <aggregate id="dc_creator_agg" parameter="dc:creator" type="terms">
          <field name="dc_creator_agg" schema="expired_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="dc_expired_agg" parameter="dc:expired" type="date_histogram">
          <field name="dc_expired_agg" schema="expired_search"/>
          <properties>
            <property name="interval">month</property>
            <property name="format">MM-yyyy</property>
            <property name="order">key asc</property>
          </properties>
        </aggregate>
      </aggregates>
      <sort ascending="true" column="dc:expired"/>
      <pageSize>20</pageSize>
      <quickFilters>
        <quickFilter name="approved">
          <clause>ecm:currentLifeCycleState = 'approved'</clause>
        </quickFilter>
      </quickFilters>
    </coreQueryPageProvider>

  </extension>

</component>
